/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package tetris_invader.itens;

import java.awt.Image;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javazoom.jl.decoder.JavaLayerException;
import javazoom.jl.player.Player;
import tetris_invader.personagens.Invasor;
import tetris_invader.util.Fase;
import tetris_invader.util.Pair;
import tetris_invader.util.Timer;
import tetris_invader.util.TimerListener;

/**
 * Disparo especial. Canhao gigante que elimina todos os invasores a sua frnete
 */
public class SpecialBeam extends Item implements TimerListener{

    private int i;
    private int incremento;
    private Pair aceleracao;
    private Pair velocidade;
    private Player beamfx;
    private Timer fxTimer;

    public SpecialBeam(Fase fase, Image imagens[]) {
        super(fase, imagens);
        i = 0;
        incremento = 1;
        velocidade = new Pair(0, 0);
        aceleracao = new Pair(0, 3);
        fxTimer = new Timer(this, 100);

        try {
            FileInputStream log;
            try {
                log = new FileInputStream("src/sound/18.mp3");
                beamfx = new Player(log);
            } catch (FileNotFoundException ex) {
                Logger.getLogger(Life_Item.class.getName()).log(Level.SEVERE, null, ex);
            }
        } catch (JavaLayerException ex) {
            Logger.getLogger(Life_Item.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public void start() {
        fxTimer.start();
    }

    public void deslocamento() {

        if (velocidade.lessThen(50)) {
            velocidade.sum(aceleracao);
        }

        this.posicao.x += velocidade.getX();
        this.posicao.y -= velocidade.getY();

    }

    /**
     * Verifica colisao com algum invasor.<br>
     * Se a colisao ocorrer, o invasor perde uma vida
     * @param inv Invasor com quem esta se comparando a colisao.
     * @return <i>true</i> se houve colisao
     */
    public boolean colisao(Object o) {
        if (o instanceof Invasor) {
            Invasor inv = (Invasor) o;
            return (!(posicao.x > inv.getPosition().x + inv.getSize()
                    || posicao.y > inv.getPosition().y + inv.getSize()
                    || posicao.x + 135 < inv.getPosition().x
                    || posicao.y + 384 < inv.getPosition().y));
        }
        return false;
    }

    public void update() {
        try {
            beamfx.play();
        } catch (JavaLayerException ex) {
            Logger.getLogger(Life_Item.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}
